Sails 框架有什么
Sails 基于 Express 和 Socket.IO 的:
Sails: 基于 Express, 不只是 Express.
这意味着 Sails 拥有 Express 支持的所有特性, Express 的 mvc 思路可以移植过来, 基本的 http 插件可以使用 Middleware <config/http.js>来进行配置
同时又有许多特性简化开发.
Sails 集成通过 Socket.IO 插件支持 Socket 操作.
Waterline
基于 ORM 进行统一数据交互, 屏蔽不同数据库特性, 唯一需要做的就是添加一个配置在 connection.js 中
统一数据库的操作为自己的函数, 只需要将该函数的输出转换为不同数据库支持的方法即可对该数据库进行操作, 基本常见数据库已经有相应的实现方案, 直接引入即可.
PS: 此处要说的是, 无法同时对多类型数据库进行写入, 对指定类型数据库进行读取是有些遗憾的. 没有提供关系型/非关系型数据库的迁移方案
相对于 Express 更明确地增加了一些支持
assert 对应Express的public
api/controller 对应Express的router
views 对应Express的views
api/policies 接口执行前的执行序列, 校验参数, 用户合法性
api/response 统一定义常用的返回方法, 执行逻辑后处理
api/model 数据库结构的定义, 全局访问
api/services 理解为静态方法, 全局访问
config 所有配置文件
tasks Grunt所需的自动化检测任务
可以使用生成方法直接生成代码结构(保证命名格式), 只需要填写相应的逻辑即可. 和数据库相关操作无需再进行针对不同数据库的操作, 同时也无需写各种代码进行 CRUD 操作.
总的来说简化了 model 层, 提出了静态方法层, 增加了接口执行前后的整合操作.
Sails 的 BluePrint:
BluePrint 支持只通过定义数据库结构, 通过制定的 api 对数据库进行操作.
Policies 执行前的那些事儿
在执行接口前执行的代码段, 可以校验 Session, 可以校验加密算法等等…
Response 执行后的那些事儿
执行逻辑之后, 可以再对同一类返回进行统一的操作.
Express
Express 比 Sails 好在哪里?
Sails 是基于 Express 的, 这就意味着 Sails 提供更顶层的封装, 影响代码灵活性, 加大可理解程度和学习成本.
Socket.IO
Socket.IO 比 Sails 好在哪里?
Sails 是基于 Socket.IO 的, 将 Socket 一些常用方法进行封装, 但不是完全支持更底层操作.
其他
三者均可自动化测试的测试驱动开发
基于 mocha 对功能(model/controller/server)进行测试, 基于 istanbul 对代码覆盖率进行测试